﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>缓冲对象 - 定义 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The Buffer object encapsulates a block of memory for use with advanced techniques such as DllCall, structures, StrPut and raw file I/O." />
<meta name="ahk:equiv-v1" content="commands/VarSetCapacity.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

 <h1>缓冲对象</h1>

<p>封装一块内存, 用于高级技术, 如 DllCall, 结构体, StrPut 和原始文件 I/O.</p>
<p>缓冲对象通常通过调用 <a href="../commands/BufferAlloc.htm">BufferAlloc</a> 创建, 但也可以由 <a href="../commands/FileRead.htm">FileRead</a> 使用 "RAW" 选项返回.</p>
<pre>Buffer := BufferAlloc(ByteCount)</pre>
<p><a href="../commands/ClipboardAll.htm">ClipboardAll</a> 返回缓冲的子类, 也命名为 ClipboardAll.</p>
<p><strong>属性:</strong></p>
<ul>
  <li><a href="#Ptr">Ptr</a></li>
  <li><a href="#Size">Size</a></li>
</ul>

 <h2 id="like">类缓冲对象</h2>
<p>一些内置函数接受缓冲对象来代替地址 - 请参阅<a href="#Related">相关</a>部分以获取链接. 这些函数也接受具有 <a href="#Ptr">Ptr</a> 和 <a href="#Size">Size</a> 属性的任何其他对象, 但是针对原生的缓冲对象进行了优化.</p>
<p>在大多数情况下, 传递缓冲对象比传递地址更安全, 因为函数可以读取<a href="#Size">缓冲区大小</a>以确保它不会尝试访问缓冲区之外的任何内存位置. 一个例外是 <a href="../commands/DllCall.htm">DllCall</a> 调用程序之外的函数; 在这些情况下, 可能需要将<a href="#Size">缓冲区大小</a>显式传递给函数.</p>

<h2 id="Properties">属性</h2>
<div class="methodShort" id="Ptr"><h2>Ptr</h2>
<p>检索缓冲区的当前内存地址.</p>
<pre class="Syntax">Ptr := Buffer.Ptr</pre>
<p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
<p>当释放或重新分配缓冲区时, 此属性返回的任何地址都将无效. 不能使用无效地址. 缓冲区在缓冲对象的<a href="../Objects.htm#Reference_Counting">引用计数</a>达到零之前不会被释放, 但是当它的<a href="#Size">大小</a>更改时会重新分配缓冲区.</p>
</div>

<div class="methodShort" id="Size"><h2>Size</h2>
<p>检索或设置缓冲区的大小, 以字节为单位.</p>
<pre class="Syntax">ByteCount := Buffer.Size</pre>
<pre class="Syntax">Buffer.Size := ByteCount</pre>
<p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
<p>缓冲区的地址通常会随着大小的改变而改变. 如果减小大小, 则缓冲区中的数据将被截断, 但保留剩余的字节. 如果增加大小, 则保留所有数据并且任何新字节的值都是任意的(由于性能原因, 它们未初始化).</p>
<p>该属性始终返回 <a href="../commands/BufferAlloc.htm">BufferAlloc</a> 或先前赋值给出的确切值.</p>
</div>

<h2 id="Related">相关</h2>
<p><a href="../commands/BufferAlloc.htm">BufferAlloc</a>, <a href="../commands/DllCall.htm">DllCall</a>, <a href="../commands/NumPut.htm">NumPut</a>, <a href="../commands/NumGet.htm">NumGet</a>, <a href="../commands/StrPut.htm">StrPut</a>, <a href="../commands/StrGet.htm">StrGet</a>, <a href="File.htm#RawRead">File.RawRead</a>, <a href="File.htm#RawWrite">File.RawWrite</a>, <a href="../commands/ClipboardAll.htm">ClipboardAll</a></p>

</body>
</html>